/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package mrp.login;

import java.io.Serializable;
import java.util.List;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.servlet.http.HttpSession;
import mrp.entity.GestorBaseDatos;
import mrp.entity.Usuario;
import mrp.beans.UsuarioBean;


/**
 *
 * @author root
 */
@ManagedBean(name="login")
@SessionScoped

public class Login implements Serializable
{
    private String usuario;
    private String clave;
    private String pagina;
   
   @ManagedProperty("#{usuarioBean}")
   private UsuarioBean usuarioBean;

    public Login() {
    }

       
//////    Metodo finalize
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
    }
//////   fin Metodo finalize
    
    
/////    Getters and Setters
    public String getUsuario() {
        return usuario;
    }

    public void setUsuario(String usuario) {
        this.usuario = usuario;
    }

    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
    public String obtenerPagina()
    {
        return this.pagina;
    }

    public UsuarioBean getUsuarioBean() {
        return usuarioBean;
    }

    public void setUsuarioBean(UsuarioBean usuarioBean) {
        this.usuarioBean = usuarioBean;
    }
 
    public void setPagina(String pagina) {
        this.pagina = pagina;
    }
/////    fin de Getters and Setters
    
//////////    Iniciar, cerrar  y comprobar sesion
    private void iniciarSesion()
    {
        HttpSession httpsession = ( HttpSession ) FacesContext.getCurrentInstance().getExternalContext().getSession( true );
        System.out.println("Session ---- " + httpsession.getId());
        httpsession.setMaxInactiveInterval(-1);
        this.setPagina("index");
    }
    public void cerrarSesion()
    {
        FacesContext context = FacesContext.getCurrentInstance();
        ExternalContext externalContext = context.getExternalContext();
        Object session = externalContext.getSession(false);
        HttpSession httpSession = (HttpSession) session;
//         System.out.println("cerrar Session  ---- >>>>" +httpSession.getId().toString()); 
         this.setPagina("login");
        httpSession.invalidate();
        
    }
    public String verificarSesionUsuario() //se obtiene el id de sesion asignado por el sistema
    {
        try
        {
            FacesContext context = FacesContext.getCurrentInstance();
            ExternalContext externalContext = context.getExternalContext();
            Object session = externalContext.getSession(false);
            HttpSession httpSession = (HttpSession) session;
            return httpSession.getId();    
        }
        catch(Exception e)
        {
           System.out.println("Exception e "+e); 
        }
        return null;
    }
    public void mostrarMensaje(String tipoMensaje,String mensaje, String detalle)
    {
        if(tipoMensaje.equals("info"))
        {
            FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_INFO, mensaje,detalle) );   
        }else{
            if(tipoMensaje.equals("error"))
            {
                FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_ERROR, mensaje,detalle) );   
            }else{
                if(tipoMensaje.equals("fatal"))
                {
                    FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_FATAL, mensaje,detalle) );   
                }else{
                    if(tipoMensaje.equals("alerta"))
                    {
                        FacesContext.getCurrentInstance().addMessage(null,new FacesMessage(FacesMessage.SEVERITY_WARN, mensaje,detalle) );   
                    }
                }
            }
        }
    }
//////////////fin Iniciar, cerrar  y comprobar sesion
    
    public void validarUsuario() 
    {  
        GestorBaseDatos gbd=new GestorBaseDatos();
        String columnas="u.CodUsuario, u.CedulaUsuario, u.NombreUsuario, u.ApellidoUsuario, u.Clave,c.NombreCargo, g.NombreGrupo";
        List<String> list=gbd.select("SELECT "+columnas +"  FROM Usuario as u, Cargo as c, Grupo as g  where u.CedulaUsuario = \'"+this.getUsuario()+"\' and u.Clave=\'"+this.getClave()+"\' and u.Cargo_fk= c.CodCargo and u.Grupo_fk= g.CodGrupo");
        //    System.out.println("Welcome " + this.getUsuario()+ " "+this.getClave());
        System.out.println(" list------->>>>"+list.size());
        if(list.isEmpty()==false)
        {
            iniciarSesion();  
            usuarioBean.setUsuario(new Usuario( list.get(0),
                                                list.get(1),
                                                list.get(2),
                                                list.get(3),
                                                list.get(4),
                                                list.get(5),
                                                list.get(6),
                                                this.verificarSesionUsuario()));
            System.out.println("Session usuario loggeadoo ---- " + this.verificarSesionUsuario());
            this.mostrarMensaje("info","Bienvenido "+usuarioBean.getUsuario().getNombreUsuario()+" "+usuarioBean.getUsuario().getApellidoUsuario(),"");
        }
        else
        {
                        
            try{
            usuarioBean.getUsuario().setCodUsuario(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setCedulaUsuario(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setNombreUsuario(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setApellidoUsuario(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setClave(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setCargo(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setGrupo(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            try{
            usuarioBean.getUsuario().setIdSesion(null);
            }
            catch(java.lang.NullPointerException npe)
            {
                System.out.println("Exepcion en metodo validarUsuario() :"+npe);
            }
            
            cerrarSesion();
            System.out.println("Session usuario no loggeadoo ---- " + this.verificarSesionUsuario());
            this.mostrarMensaje("error","Usuario o Clave incorrecto","Intente nuevamente");   
        }
       
    }
     public boolean verificarLogin()
    {
        if(this.verificarSesionUsuario().equals(usuarioBean.getUsuario().getIdSesion()))
        {           
            return true;
        }        
        return false;
    }
}







//         RequestContext context = RequestContext.getCurrentInstance();
//      FacesMessage msg = null;
//      
//      if(this.getUsuario() != null && this.getUsuario().equals("admin")) {
////         loggedIn = true;
//         msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Welcome", this.getUsuario());
//      } else {
////         loggedIn = false;
//         msg = new FacesMessage(FacesMessage.SEVERITY_WARN, "Login Error", "Invalid credentials");
//      }
//      
//      FacesContext.getCurrentInstance().addMessage(null, msg);
//      context.addCallbackParam("username", this.getUsuario());